﻿#pragma once

#include <string>
#include <queue>
#include <vector>

#include "Card.h"
#include "Player.h"

namespace Cards {
	typedef std::vector<Cards::PlayerCard*> PlayersCards;
	typedef std::vector<Cards::WeaponCard*> WeaponsCards;
	typedef std::vector<Cards::RoomCard*> RoomsCards;

	/**
	* Pomocnicza klasa kawierające kolejke wszytkich typów kart
	*/
	class CardsCollection
	{
	protected:
		PlayersCards players_cards; /**< Karty graczy */
		WeaponsCards weapons_cards; /**< Karty broni */
		RoomsCards rooms_cards; /**< Karty pomieszczeń */

	public:
		/**
		* Ustawia wszystkie kolekcje kart pustymi wartościami.
		*/
		CardsCollection();
		/**
		* Ustawia kolekcję odpowiednimi wartościami.
		* @param players_cards Karty postaci
		* @param weapons_cards Karty broni
		* @param rooms_cards Karty pomieszczeń
		*/
		CardsCollection(PlayersCards players_cards, WeaponsCards weapons_cards, RoomsCards rooms_cards);

		/**
		* Niszczy wszystkie powiązane obiekty kart
		*/
		void clean();
		/**
		* @return Karty postaci
		*/
		PlayersCards getPlayersCards();
		/**
		* @return Karty broni
		*/
		WeaponsCards getWeaponsCards();
		/**
		* @return Karty pomieszczeń
		*/
		RoomsCards getRoomsCards();
	};
}

